Detaljan vodič za developere o upravljanju rezolucijom WebXR spremnika dubine, filtriranju artefakata i implementaciji kontrole kvalitete za robusnu AR okluziju i interakciju.
Ovladavanje WebXR dubinom: Dubinski uvid u rezoluciju spremnika dubine i kontrolu kvalitete
Proširena stvarnost (AR) prešla je prag iz znanstvene fantastike u opipljiv, moćan alat koji preoblikuje našu interakciju s digitalnim informacijama. Čarolija AR-a leži u njegovoj sposobnosti da neprimjetno spaja virtualno sa stvarnim. Virtualni lik koji se kreće oko namještaja u vašoj dnevnoj sobi, digitalni mjerni alat koji precizno mjeri stvarni objekt ili djelo virtualne umjetnosti ispravno skriveno iza stvarnog stupa—ova iskustva ovise o jednom ključnom komadu tehnologije: razumijevanju okoline u stvarnom vremenu. U srcu tog razumijevanja za web-bazirani AR nalazi se WebXR Depth API.
Depth API pruža developerima procjenu geometrije stvarnog svijeta po sličici, kako je vidi kamera uređaja. Ti podaci, poznati kao mapa dubine, ključ su za otključavanje sofisticiranih značajki poput okluzije, realistične fizike i stvaranja mreže okoline (environmental meshing). Međutim, pristup tim podacima o dubini samo je prvi korak. Sirove informacije o dubini često su pune šuma, nedosljedne i niže rezolucije od glavnog video prijenosa kamere. Bez pravilnog rukovanja, to može dovesti do titrajućih okluzija, nestabilne fizike i općeg sloma iluzije uranjanja.
Ovaj sveobuhvatni vodič namijenjen je WebXR developerima koji žele prijeći s osnovnog AR-a u područje zaista robusnih, uvjerljivih iskustava. Analizirat ćemo koncept rezolucije spremnika dubine, istražiti čimbenike koji umanjuju njegovu kvalitetu i pružiti skup praktičnih tehnika za kontrolu kvalitete, filtriranje i provjeru valjanosti. Ovladavanjem ovim konceptima možete pretvoriti sirove podatke pune šuma u stabilan i pouzdan temelj za AR aplikacije sljedeće generacije.
Poglavlje 1: Temelji WebXR Depth API-ja
Prije nego što možemo kontrolirati kvalitetu mape dubine, moramo prvo razumjeti što je to i kako joj pristupamo. WebXR Depth Sensing API je modul unutar WebXR Device API-ja koji izlaže informacije o dubini snimljene senzorima uređaja.
Što je mapa dubine?
Zamislite da snimate fotografiju, ali umjesto pohranjivanja informacija o boji za svaki piksel, pohranjujete udaljenost od kamere do objekta koji taj piksel predstavlja. To je, u suštini, mapa dubine. To je 2D slika, obično u sivim tonovima, gdje intenzitet piksela odgovara udaljenosti. Svjetliji pikseli mogu predstavljati objekte koji su bliže, dok tamniji pikseli predstavljaju objekte koji su dalje (ili obrnuto, ovisno o vizualizaciji).
Ovi podaci se pružaju vašem WebGL kontekstu kao tekstura, `XRDepthInformation.texture`. To vam omogućuje izvođenje vrlo učinkovitih izračuna dubine po pikselu izravno na GPU-u unutar vaših shadera—što je ključno za performanse AR-a u stvarnom vremenu.
Kako WebXR pruža informacije o dubini
Da biste koristili API, prvo morate zatražiti značajku `depth-sensing` prilikom inicijalizacije vaše WebXR sesije:
const session = await navigator.xr.requestSession('immersive-ar', { requiredFeatures: ['depth-sensing'] });
Također možete navesti postavke za format podataka i upotrebu, što ćemo istražiti kasnije u odjeljku o performansama. Jednom kada je sesija aktivna, u vašoj `requestAnimationFrame` petlji, dobivate najnovije informacije o dubini iz WebGL sloja:
const depthInfo = xrWebView.getDepthInformation(xrFrame.getViewerPose(xrReferenceSpace));
Ako je `depthInfo` dostupan, sadrži nekoliko ključnih informacija:
- texture: `WebGLTexture` koja sadrži sirove vrijednosti dubine.
- normDepthFromViewMatrix: Matrica za transformaciju koordinata iz prostora pogleda (view-space) u normalizirane koordinate teksture dubine.
- rawValueToMeters: Faktor skaliranja za pretvaranje sirovih, bezjediničnih vrijednosti iz teksture u metre. Ovo je ključno za točna mjerenja u stvarnom svijetu.
Tehnologija koja generira ove podatke razlikuje se ovisno o uređaju. Neki koriste aktivne senzore poput Time-of-Flight (ToF) ili strukturiranog svjetla, koji projiciraju infracrveno svjetlo i mjere njegov povratak. Drugi koriste pasivne metode poput stereoskopskih kamera koje pronalaze podudarnosti između dvije slike kako bi izračunale dubinu. Kao developer, ne kontrolirate hardver, ali razumijevanje njegovih ograničenja ključno je za upravljanje podacima koje proizvodi.
Poglavlje 2: Dva lica rezolucije spremnika dubine
Kada developeri čuju "rezolucija", često pomisle na širinu i visinu slike. Za mape dubine, to je samo pola priče. Rezolucija dubine je dvodijelni koncept, a oba su dijela ključna za kvalitetu.
Prostorna rezolucija: 'Što' i 'Gdje'
Prostorna rezolucija odnosi se na dimenzije teksture dubine, na primjer, 320x240 ili 640x480 piksela. To je često znatno niže od rezolucije kamere u boji uređaja (koja može biti 1920x1080 ili viša). Ova razlika je primarni izvor AR artefakata.
- Utjecaj na detalje: Niska prostorna rezolucija znači da svaki piksel dubine pokriva veće područje stvarnog svijeta. To onemogućuje snimanje finih detalja. Rubovi stola mogu izgledati kockasto, tanak stup svjetiljke može potpuno nestati, a razlika između objekata koji su blizu jedan drugome postaje nejasna.
- Utjecaj na okluziju: Ovdje je problem najvidljiviji. Kada je virtualni objekt djelomično iza stvarnog objekta, "stepenasti" artefakti niske rezolucije duž granice okluzije postaju očiti i narušavaju uranjanje.
Zamislite to kao fotografiju niske rezolucije. Možete razaznati opće oblike, ali svi fini detalji i oštri rubovi su izgubljeni. Izazov za developere često je inteligentno "povećati rezoluciju" (upsample) ili raditi s ovim podacima niske rezolucije kako bi se stvorio rezultat visoke rezolucije.
Dubina bita (preciznost): 'Koliko daleko'
Dubina bita, ili preciznost, određuje koliko različitih koraka udaljenosti može biti predstavljeno. To je numerička preciznost vrijednosti svakog piksela u mapi dubine. WebXR API može pružiti podatke u različitim formatima, kao što su 16-bitni nepredznačeni cijeli brojevi (`ushort`) ili 32-bitni brojevi s pomičnim zarezom (`float`).
- 8-bitna dubina (256 razina): 8-bitni format može predstavljati samo 256 diskretnih udaljenosti. Na rasponu od 5 metara, to znači da je svaki korak udaljen gotovo 2 centimetra. Objekti na 1.00m i 1.01m mogu dobiti istu vrijednost dubine, što dovodi do fenomena poznatog kao "kvantizacija dubine" ili pojava traka (banding).
- 16-bitna dubina (65.536 razina): Ovo je značajno poboljšanje i uobičajen format. Pruža mnogo glađi i točniji prikaz udaljenosti, smanjujući artefakte kvantizacije i omogućujući bilježenje suptilnijih varijacija dubine.
- 32-bitni float: Ovo nudi najveću preciznost i idealno je za znanstvene ili mjerne primjene. Izbjegava problem fiksnog koraka cjelobrojnih formata, ali dolazi s većim troškom performansi i memorije.
Niska dubina bita može uzrokovati "Z-fighting", gdje se dvije površine na malo različitim dubinama natječu koja će biti iscrtana ispred, uzrokujući efekt titranja. Također čini da glatke površine izgledaju stepenasto ili prugasto, što je posebno uočljivo u fizikalnim simulacijama gdje se može činiti da se virtualna lopta kotrlja niz niz stepenica umjesto niz glatku rampu.
Poglavlje 3: Stvarni svijet naspram idealne mape dubine: Čimbenici koji utječu na kvalitetu
U savršenom svijetu, svaka mapa dubine bila bi kristalno čista, visoke rezolucije i savršeno točan prikaz stvarnosti. U praksi, podaci o dubini su neuredni i podložni širokom rasponu problema uzrokovanih okolinom i hardverom.
Ovisnosti o hardveru
Kvaliteta vaših sirovih podataka fundamentalno je ograničena hardverom uređaja. Iako ne možete promijeniti senzore, svijest o njihovim tipičnim točkama kvara ključna je za izradu robusnih aplikacija.
- Vrsta senzora: Time-of-Flight (ToF) senzori, uobičajeni u mnogim vrhunskim mobilnim uređajima, općenito su dobri, ali na njih može utjecati ambijentalno infracrveno svjetlo (npr. jaka sunčeva svjetlost). Stereoskopski sustavi mogu imati problema s površinama bez teksture poput običnog bijelog zida, jer nema izraženih značajki za podudaranje između dva pogleda kamere.
- Profil napajanja uređaja: Kako bi uštedio bateriju, uređaj može namjerno pružiti mapu dubine niže rezolucije ili s više šuma. Neki uređaji mogu čak izmjenjivati različite načine očitavanja, uzrokujući primjetne promjene u kvaliteti.
Saboteri iz okoline
Okolina u kojoj se vaš korisnik nalazi ima ogroman utjecaj na kvalitetu podataka o dubini. Vaša AR aplikacija mora biti otporna na ove uobičajene izazove.
- Problematična svojstva površina:
- Reflektirajuće površine: Ogledala i polirani metal djeluju poput portala, pokazujući dubinu reflektirane scene, a ne same površine. To može stvoriti bizarnu i netočnu geometriju u vašoj mapi dubine.
- Prozirne površine: Staklo i prozirna plastika često su nevidljivi senzorima dubine, što dovodi do velikih rupa ili netočnih očitanja dubine onoga što je iza njih.
- Tamne ili površine koje upijaju svjetlost: Vrlo tamne, mat površine (poput crnog baršuna) mogu apsorbirati infracrveno svjetlo aktivnih senzora, što rezultira nedostajućim podacima (rupama).
- Uvjeti osvjetljenja: Jaka sunčeva svjetlost može preopteretiti ToF senzore, stvarajući značajan šum. Suprotno tome, vrlo slabi uvjeti osvjetljenja mogu biti izazovni za pasivne stereo sustave, koji se oslanjaju na vidljive značajke.
- Udaljenost i domet: Svaki senzor dubine ima optimalan radni domet. Objekti koji su preblizu mogu biti izvan fokusa, dok se točnost značajno smanjuje za udaljene objekte. Većina senzora za potrošače pouzdana je samo do otprilike 5-8 metara.
- Zamućenje pokreta (Motion Blur): Brzo kretanje uređaja ili objekata u sceni može uzrokovati zamućenje pokreta u mapi dubine, što dovodi do razmazanih rubova i netočnih očitanja.
Poglavlje 4: Alatnica za developere: Praktične tehnike za kontrolu kvalitete
Sada kada razumijemo probleme, usredotočimo se na rješenja. Cilj nije postići savršenu mapu dubine—to je često nemoguće. Cilj je obraditi sirove podatke pune šuma u nešto što je dosljedno, stabilno i dovoljno dobro za potrebe vaše aplikacije. Sve sljedeće tehnike trebale bi se implementirati u vašim WebGL shaderima za performanse u stvarnom vremenu.
Tehnika 1: Vremensko filtriranje (zaglađivanje kroz vrijeme)
Podaci o dubini od sličice do sličice mogu biti vrlo "trzavi", s pojedinačnim pikselima koji brzo mijenjaju svoje vrijednosti. Vremensko filtriranje to zaglađuje miješanjem podataka o dubini trenutne sličice s podacima iz prethodnih sličica.
Jednostavna i učinkovita metoda je Eksponencijalni pomični prosjek (EMA). U vašem shaderu, održavali biste "povijesnu" teksturu koja pohranjuje zaglađenu dubinu iz prethodne sličice.
Konceptualna logika shadera:
float smoothing_factor = 0.6; // Vrijednost između 0 i 1. Viša = više zaglađivanja.
vec2 tex_coord = ...; // Koordinata teksture trenutnog piksela
float current_depth = texture2D(new_depth_map, tex_coord).r;
float previous_depth = texture2D(history_depth_map, tex_coord).r;
// Ažuriraj samo ako je trenutna dubina važeća (nije 0)
if (current_depth > 0.0) {
float smoothed_depth = mix(current_depth, previous_depth, smoothing_factor);
// Zapiši smoothed_depth u novu povijesnu teksturu za sljedeću sličicu
} else {
// Ako su trenutni podaci nevažeći, samo prenesi stare podatke
// Zapiši previous_depth u novu povijesnu teksturu
}
Prednosti: Izvrsno smanjuje visokofrekventni šum i titranje. Čini da se okluzije i fizikalne interakcije osjećaju mnogo stabilnije.
Nedostaci: Uvodi blago kašnjenje ili "ghosting" efekt, posebno kod brzo pokretnih objekata. `smoothing_factor` se mora podesiti kako bi se uravnotežila stabilnost s odzivom.
Tehnika 2: Prostorno filtriranje (zaglađivanje sa susjedima)
Prostorno filtriranje uključuje modificiranje vrijednosti piksela na temelju vrijednosti njegovih susjednih piksela. Ovo je odlično za popravljanje izoliranih pogrešnih piksela i zaglađivanje malih neravnina.
- Gaussovo zamućenje: Jednostavno zamućenje može smanjiti šum, ali će također omekšati važne oštre rubove, što dovodi do zaobljenih kutova na stolovima i zamućenih granica okluzije. Općenito je preagresivno za ovaj slučaj upotrebe.
- Bilateralni filtar: Ovo je filtar za zaglađivanje koji čuva rubove. Djeluje tako da usrednjava susjedne piksele, ali daje veću težinu susjedima koji imaju sličnu vrijednost dubine kao središnji piksel. To znači da će zagladiti ravni zid, ali neće usrednjavati piksele preko diskontinuiteta dubine (poput ruba stola). Ovo je mnogo prikladnije za mape dubine, ali je računski skuplje od jednostavnog zamućenja.
Tehnika 3: Popunjavanje rupa i inpainting
Često će vaša mapa dubine sadržavati "rupe" (piksele s vrijednošću 0) gdje senzor nije uspio dobiti očitanje. Te rupe mogu uzrokovati neočekivano pojavljivanje ili nestajanje virtualnih objekata. Jednostavne tehnike popunjavanja rupa mogu to ublažiti.
Konceptualna logika shadera:
vec2 tex_coord = ...;
float center_depth = texture2D(depth_map, tex_coord).r;
if (center_depth == 0.0) {
// Ako je ovo rupa, uzorkuj susjede i usrednji važeće
float total_depth = 0.0;
float valid_samples = 0.0;
// ... petlja preko 3x3 ili 5x5 mreže susjeda ...
// if (neighbor_depth > 0.0) { total_depth += neighbor_depth; valid_samples++; }
if (valid_samples > 0.0) {
center_depth = total_depth / valid_samples;
}
}
// Koristi (potencijalno popunjenu) vrijednost center_depth
Naprednije tehnike uključuju propagiranje vrijednosti dubine s rubova rupe prema unutra, ali čak i jednostavno usrednjavanje susjeda može značajno poboljšati stabilnost.
Tehnika 4: Povećanje rezolucije (Upsampling)
Kao što je rečeno, mapa dubine obično je mnogo niže rezolucije od slike u boji. Da bismo izvršili točnu okluziju po pikselu, moramo generirati mapu dubine visoke rezolucije.
- Bilinearna interpolacija: Ovo je najjednostavnija metoda. Prilikom uzorkovanja teksture dubine niske rezolucije u vašem shaderu, hardverski uzorkivač GPU-a može automatski pomiješati četiri najbliža piksela dubine. To je brzo, ali rezultira vrlo zamućenim rubovima.
- Povećanje rezolucije uz očuvanje rubova (Edge-Aware Upsampling): Napredniji pristup koristi sliku u boji visoke rezolucije kao vodič. Logika je da ako postoji oštar rub na slici u boji (npr. rub tamne stolice uz svijetli zid), vjerojatno bi trebao postojati i oštar rub u mapi dubine. To sprječava zamućivanje preko granica objekata. Iako je složeno za implementaciju od nule, osnovna ideja je koristiti tehnike poput Joint Bilateral Upsamplera, koji modificira težine filtra na temelju prostorne udaljenosti i sličnosti boja u teksturi kamere visoke rezolucije.
Tehnika 5: Otklanjanje pogrešaka i vizualizacija
Ne možete popraviti ono što ne vidite. Jedan od najmoćnijih alata u vašoj alatnici za kontrolu kvalitete je mogućnost izravne vizualizacije mape dubine. Možete iscrtati teksturu dubine na četverokut na zaslonu. Budući da sirove vrijednosti dubine nisu u vidljivom rasponu, morat ćete ih normalizirati u svom fragment shaderu.
Konceptualna logika shadera za normalizaciju:
float raw_depth = texture2D(depth_map, tex_coord).r;
float depth_in_meters = raw_depth * rawValueToMeters;
// Normaliziraj na raspon 0-1 za vizualizaciju, npr. za maksimalni raspon od 5 metara
float max_viz_range = 5.0;
float normalized_color = clamp(depth_in_meters / max_viz_range, 0.0, 1.0);
gl_FragColor = vec4(normalized_color, normalized_color, normalized_color, 1.0);
Gledajući sirove, filtrirane i uvećane mape dubine jednu pored druge, možete intuitivno podesiti svoje parametre filtriranja i odmah vidjeti utjecaj vaših algoritama za kontrolu kvalitete.
Poglavlje 5: Studija slučaja - Implementacija robusne okluzije
Povežimo ove koncepte s najčešćim slučajem upotrebe za Depth API: okluzijom. Cilj je učiniti da se virtualni objekt ispravno pojavljuje iza stvarnih objekata.
Osnovna logika (u Fragment Shaderu)
Proces se događa za svaki pojedini piksel vašeg virtualnog objekta:
- Dohvati dubinu virtualnog fragmenta: U vertex shaderu izračunavate poziciju vrha u clip-spaceu. Z-komponenta ove pozicije, nakon perspektivne podjele, predstavlja dubinu vašeg virtualnog objekta. Proslijedite ovu vrijednost fragment shaderu.
- Dohvati dubinu stvarnog svijeta: U fragment shaderu, morate saznati koji piksel u mapi dubine odgovara trenutnom virtualnom fragmentu. Možete koristiti `normDepthFromViewMatrix` koji pruža API za transformaciju pozicije vašeg fragmenta iz view-spacea u koordinate teksture mape dubine.
- Uzorak i obrada stvarne dubine: Koristite te koordinate teksture za uzorkovanje vaše (idealno, prethodno filtrirane i uvećane) mape dubine. Ne zaboravite pretvoriti sirovu vrijednost u metre koristeći `rawValueToMeters`.
- Usporedi i odbaci: Usporedite dubinu vašeg virtualnog fragmenta s dubinom stvarnog svijeta. Ako je virtualni objekt udaljeniji (ima veću vrijednost dubine) od stvarnog objekta na tom pikselu, tada je zaklonjen (okludiran). U GLSL-u koristite ključnu riječ `discard` da biste u potpunosti zaustavili iscrtavanje tog piksela.
Bez kontrole kvalitete: Rubovi okluzije bit će kockasti (zbog niske prostorne rezolucije) i treperit će ili se pjeniti (zbog vremenskog šuma). Izgledat će kao da je na vaš virtualni objekt grubo primijenjena maska sa šumom.
S kontrolom kvalitete: Primjenom tehnika iz Poglavlja 4—pokretanjem vremenskog filtra za stabilizaciju podataka i korištenjem metode povećanja rezolucije uz očuvanje rubova—granica okluzije postaje glatka i stabilna. Virtualni objekt će izgledati kao da je čvrsto i uvjerljivo dio stvarne scene.
Poglavlje 6: Performanse, performanse, performanse
Obrada podataka o dubini svake sličice može biti računski zahtjevna. Loša implementacija može lako povući broj sličica u sekundi vaše aplikacije ispod ugodnog praga za AR, što dovodi do mučnog iskustva. Evo nekoliko nezaobilaznih najboljih praksi.
Ostanite na GPU-u
Nikada ne čitajte podatke teksture dubine natrag na CPU unutar vaše glavne petlje iscrtavanja (npr. koristeći `readPixels`). Ova operacija je nevjerojatno spora i zaustavit će cjevovod iscrtavanja, uništavajući vašu brzinu sličica. Sva logika filtriranja, povećanja rezolucije i usporedbe mora se izvršiti u shaderima na GPU-u.
Optimizirajte svoje shadere
- Koristite odgovarajuću preciznost: Koristite `mediump` umjesto `highp` za floatove i vektore gdje je to moguće. To može pružiti značajno poboljšanje performansi na mobilnim GPU-ovima.
- Minimizirajte dohvaćanje tekstura: Svako uzorkovanje teksture ima svoju cijenu. Prilikom implementacije filtara, pokušajte ponovno iskoristiti uzorke gdje je to moguće. Na primjer, 3x3 box blur može se razdvojiti u dva prolaza (jedan horizontalni, jedan vertikalni) koji zahtijevaju manje čitanja tekstura ukupno.
- Grananje je skupo: Složene `if/else` naredbe u shaderu mogu uzrokovati probleme s performansama. Ponekad je brže izračunati oba ishoda i koristiti matematičku funkciju poput `mix()` ili `step()` za odabir rezultata.
Koristite pametno pregovaranje o značajkama WebXR-a
Kada zatražite značajku `depth-sensing`, možete pružiti deskriptor s postavkama:
{ requiredFeatures: ['depth-sensing'],
depthSensing: {
usagePreference: ['cpu-optimized', 'gpu-optimized'],
dataFormatPreference: ['luminance-alpha', 'float32']
}
}
- usagePreference: `gpu-optimized` je ono što želite za iscrtavanje u stvarnom vremenu, jer sustavu sugerira da ćete prvenstveno koristiti podatke o dubini na GPU-u. `cpu-optimized` se može koristiti za zadatke poput asinkrone rekonstrukcije mreže.
- dataFormatPreference: Traženje `float32` dat će vam najveću preciznost, ali može imati cijenu u performansama. `luminance-alpha` pohranjuje 16-bitnu vrijednost dubine u dva 8-bitna kanala, što zahtijeva malo logike pomicanja bitova u vašem shaderu za rekonstrukciju, ali može biti performantnije na nekom hardveru. Uvijek provjerite koji ste format zapravo dobili, jer sustav pruža ono što ima na raspolaganju.
Implementirajte adaptivnu kvalitetu
Pristup "jedna veličina za sve" kvaliteti nije optimalan. Vrhunski uređaj može podnijeti složeni višeprolazni bilateralni filtar, dok bi se slabiji uređaj mogao mučiti. Implementirajte sustav adaptivne kvalitete:
- Pri pokretanju, izmjerite performanse uređaja ili provjerite njegov model.
- Na temelju performansi, odaberite drugačiji shader ili drugačiji skup tehnika filtriranja.
- Visoka kvaliteta: Vremenski EMA + Bilateralni filtar + Povećanje rezolucije uz očuvanje rubova.
- Srednja kvaliteta: Vremenski EMA + Jednostavno usrednjavanje susjeda 3x3.
- Niska kvaliteta: Bez filtriranja, samo osnovna bilinearna interpolacija.
To osigurava da vaša aplikacija radi glatko na najširem mogućem rasponu uređaja, pružajući najbolje moguće iskustvo za svakog korisnika.
Zaključak: Od podataka do iskustva
WebXR Depth API je vrata u novu razinu uranjanja, ali nije "plug-and-play" rješenje za savršen AR. Sirovi podaci koje pruža samo su polazna točka. Pravo majstorstvo leži u razumijevanju nesavršenosti podataka—njihovih ograničenja rezolucije, njihovog šuma, njihovih slabosti u okolini—i primjeni promišljenog cjevovoda za kontrolu kvalitete koji vodi računa o performansama.
Implementacijom vremenskog i prostornog filtriranja, inteligentnim rukovanjem rupama i razlikama u rezoluciji te stalnom vizualizacijom vaših podataka, možete pretvoriti bučan, treperav signal u stabilan temelj za vašu kreativnu viziju. Razlika između neskladnog AR demoa i zaista uvjerljivog, imerzivnog iskustva često leži u ovom pažljivom upravljanju informacijama o dubini.
Polje očitavanja dubine u stvarnom vremenu neprestano se razvija. Budući napredak može donijeti rekonstrukciju dubine poboljšanu umjetnom inteligencijom, semantičko razumijevanje (znajući da piksel pripada 'podu' naspram 'osobe') i senzore veće rezolucije na više uređaja. Ali temeljni principi kontrole kvalitete—zaglađivanja, filtriranja i provjere valjanosti podataka—ostat će ključne vještine za svakog developera koji ozbiljno želi pomicati granice mogućeg u proširenoj stvarnosti na otvorenom webu.